#ifndef _GPS_DATA_H
#define _GPS_DATA_H

#include <stdio.h>
#include <string.h>
#include <time.h>

// GPS 基本数据结构体
typedef struct {
    float latitude;      // 纬度
    float longitude;     // 经度
    float altitude;      // 海拔高度
    float speed;         // 速度
    float course;        // 航向
    int satellites;      // 可见卫星数量
    int fixQuality;      // 定位质量 (0=无效, 1=GPS定位, 2=DGPS定位)
    float hdop;          // 水平精度因子
    float pdop;          // 位置精度因子
    float vdop;          // 垂直精度因子
    time_t timestamp;    // 时间戳
    bool isValid;        // 数据是否有效
} GPSData;

// GGA 句子数据
typedef struct {
    float latitude;      // 纬度
    float longitude;     // 经度
    int fixQuality;      // 定位质量
    int numSatellites;   // 卫星数量
    float hdop;          // 水平精度因子
    float altitude;      // 海拔高度
    char altitudeUnit;   // 海拔高度单位
    float geoidHeight;   // 大地水准面高度
    char geoidUnit;      // 大地水准面高度单位
    time_t utcTime;      // UTC 时间
} GGAData;

// RMC 句子数据
typedef struct {
    time_t utcTime;      // UTC 时间
    bool status;         // 状态 (A=有效, V=无效)
    float latitude;      // 纬度
    float longitude;     // 经度
    float speed;         // 速度 (节)
    float course;        // 航向 (度)
    time_t date;         // 日期
    float magneticVar;   // 磁偏角
    char varDirection;   // 磁偏角方向
} RMCData;

// GSA 句子数据
typedef struct {
    char mode;           // 模式 (M=手动, A=自动)
    int fixType;         // 定位类型 (1=无定位, 2=2D定位, 3=3D定位)
    int satellites[12];  // 卫星PRN号
    float pdop;          // 位置精度因子
    float hdop;          // 水平精度因子
    float vdop;          // 垂直精度因子
} GSAData;

// GSV 句子数据
typedef struct {
    int totalMessages;   // 总消息数
    int messageNumber;   // 当前消息号
    int totalSatellites; // 可见卫星总数
    // 以下数据会在解析时处理
} GSVData;

// 解析 GPS 数据
extern void parseGPSData(char* buffer, int length);

// 解析 GGA 句子
extern void parseGGASentence(char* buffer, GGAData* data);

// 解析 RMC 句子
extern void parseRMCSentence(char* buffer, RMCData* data);

// 解析 GSA 句子
extern void parseGSASentence(char* buffer, GSAData* data);

// 解析 GSV 句子
extern void parseGSVSentence(char* buffer, GSVData* data);

#endif